# -*- coding: utf-8 -*-
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# DTCloud360
# 邮件:yifugui@aliyun.com
# 作者：Fugui
# 公司网址： http://www.dtcloud360.com/
# Copyright 中亿丰数字科技集团有限公司 2012-2025
# 日期：2024/10/14 下午3:47
# 文件:     dt_jwt.py
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
import time
import jwt
from dtcloud.tools import config

JWT_TOKEN_EXPIRE_TIME = config.get('token_timeout', 60 * 60 * 24 * 7)  # token有效时间 7 天
JWT_SECRET = config.get('token_secret', '1d867f1581f87008e3043be929652784')   # 加解密密钥
JWT_ALGORITHM = 'HS256'  # 加解密算法


def generate_jwt_token(payload: dict) -> str:
    """根据用户id生成token"""
    payload.update({
        'exp': int(time.time()) + JWT_TOKEN_EXPIRE_TIME
    })
    token = jwt.encode(payload, JWT_SECRET, algorithm=JWT_ALGORITHM)
    return token


def verify_jwt_token(token: str) -> dict:
    """验证用户token"""
    try:
        _payload = jwt.decode(token, JWT_SECRET, algorithms=[JWT_ALGORITHM])
    except jwt.PyJWTError:
        print('token解析失败')
        return False
    else:
        exp = int(_payload.pop('exp'))
        if time.time() > exp:
            print('已失效')
            return False
        return _payload


